今天要來介紹一下CNN的模型架構,先使用昨天那張圖來介紹。
我們可以將這個CNN模型分為幾個部分,分別是:
而其中卷積層以及池化層是負責做圖片的特徵擷取的部分,而最後的全連接層則是負責分類。
今天先來了解Convolution Layer是怎麼運作的吧。
由於卷積層是拿來做特徵擷取,所以他會將一張大的圖片,藉由一個小的卷積核來對圖片的每個部份做比對,來找出圖片符合特徵的地方,這樣講可能很難懂,先附上一張圖片。
下面那張9x9的圖片是我們想要辨識的叉叉,而上面三個3x3就是我們的卷積核,而裡面的數字可以讓我們用來做卷積的計算,從而得出我們現在所比對的這個區域是不是符合我們的卷積核。
如圖下所示:
我們左上的卷積核對應到下面的綠色框框的區域,都是3x3每一格互相對應並且格子的數字相乘,最後可以得出右上,代表這個區域是符合我們的卷積核的,透過這樣的方式,從左上到右下,將整張圖片都比對一遍,如下圖所示。
可能有人會覺得有些奇怪,怎麼會有小數?觀察比較仔細的人更會發現,怎麼從原本9x9變成7x7了?
那是因為卷積層的步驟還沒講完,我們先看下一個步驟的圖片:
現在有一張5x5的image,我們用一個3x3的卷積核去做卷積,並且我們可以由圖中知道卷積的運作方式,卷積核從圖片的左上角開始,每次向右一格,直到圖片邊界,之後往下一格,一樣從左邊開始,直到圖片邊界,之後同理,並且每次經過計算後,他會將9格的計算結果透過取平均、加總等方式濃縮成一格,所以當3x3的卷積核在掃描5x5的圖片時,左到右3次,上到下也3次,最後輸出了一個3x3的結果。
每次移動幾格這個稱為stride(步長),當stride=2時,卷積核每次變移動兩格,所產生出來的結果大小也就不同。
這樣應該可以解決上面那個叉叉圖片的疑惑了,一個9x9的圖片,經過一個3x3的卷積核,左到右7次,上到下7次,輸出7x7的結果,並且他是以取平均的方式來進行計算。
這就是卷積層的一個基本的概念和運作方式,當然,卷積層可以有一些特殊的用法,當我們之後舉例有講到時會再進行介紹:D。
資料來源:
https://icecreamlabs.com/2018/08/19/3x3-convolution-filters%E2%80%8A-%E2%80%8Aa-popular-choice/
https://vinodsblog.com/2018/10/15/everything-you-need-to-know-about-convolutional-neural-networks/
https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html